Jerry's Log

JS vs TS

contents

JavaScript (JS) 는 웹의 표준 클라이언트 측 스크립트 언어이자 모든 최신 웹 브라우저의 기본 언어입니다. TypeScript (TS) 는 마이크로소프트가 개발한 언어로, 자바스크립트의 슈퍼셋(Superset) 이며, 자바스크립트의 모든 기능을 포함하면서도 정적 타입 시스템과 클래스 기반 객체 지향 기능을 추가하여 대규모 애플리케이션 개발에 적합하도록 설계되었습니다.


파트 1: 자바스크립트 (JavaScript, JS) - 기반

자바스크립트는 ECMA-262 표준(ECMAScript)을 기반으로 하는 고수준, 인터프리터 방식의 언어입니다.

동적 타입 (Dynamic Typing)

JS의 가장 큰 특징입니다. 변수의 타입은 런타임(실행 시점)에 결정되며, 하나의 변수가 서로 다른 타입의 값을 가질 수 있습니다.

let myVar = 10;     // myVar는 number 타입
myVar = "hello";    // myVar는 string 타입으로 변경됨

실행 환경

JS는 브라우저(V8, SpiderMonkey 등 엔진 사용)와 서버 환경(Node.js 등)에서 모두 실행됩니다. 인터프리터 방식으로 작동하지만, 성능을 위해 JIT(Just-In-Time) 컴파일을 통해 기계어로 변환되기도 합니다.


파트 2: 타입스크립트 (TypeScript, TS) - 슈퍼셋 🛡️

타입스크립트는 자바스크립트의 모든 문법을 그대로 사용하면서 정적 타입을 추가한 상위 언어입니다.

정적 타입 (Static Typing)

TS의 핵심 가치입니다. 모든 변수, 함수 매개변수, 객체 속성에 타입을 명시합니다.

let myVar: number = 10; // myVar는 number 타입으로 선언됨
myVar = "hello"; // 컴파일 시점에 오류 발생!

컴파일 과정 (Transpilation)

브라우저는 타입스크립트를 직접 이해하지 못합니다. 따라서 TS 코드는 실행되기 전에 반드시 트랜스파일(Transpile) 과정을 거쳐 일반 자바스크립트 코드로 변환되어야 합니다.


파트 3: 상세 비교 - 대규모 애플리케이션의 필요성

특징 자바스크립트 (동적) 타입스크립트 (정적)
타입 검사 시점 런타임 (실행될 때만 오류 발견) 컴파일 타임 (실행 전에 오류 발견)
코드베이스 확장성 낮음 (대규모 협업 시 타입 불일치 버그 다발) 높음 (코드가 커져도 구조와 타입을 명확히 함)
도구 지원 (IntelliSense) 제한적 (객체 구조를 추론해야 함) 매우 우수 (타입을 알기 때문에 자동 완성, 리팩토링 기능이 강력함)
핵심 철학 자유, 유연성, 빠른 프로토타이핑 안전, 명확성, 확장성

런타임 오류의 위험

자바스크립트에서 발생하는 흔한 문제는 다음과 같습니다.

function greet(user) {
    // 개발자의 의도는 user.name을 출력하는 것이었으나, 오타가 남
    console.log(user.nmae); // user 객체가 로드될 때까지 오류를 알 수 없음
}
greet({ name: "Alice" });

타입스크립트를 사용하면, 컴파일러가 user 객체에 nmae 속성이 없음을 즉시 경고하므로, 코드가 실행되기도 전에 버그를 잡을 수 있습니다.


파트 4: 타입스크립트의 주요 고급 기능

타입스크립트는 단순한 타입 표기 이상의 고급 기능들을 제공합니다.


파트 5: 언제 무엇을 선택해야 하는가

references